网络流水题。
既然要抓到所有的兔子,又要用最少的狼,很容易想到,这是在让我们求最小割。
那么如何求最小割呢?
有一条定理是这样的:最大流=最小割
所以我们只要用 $Dinic$ 跑出最大流,然后直接输出就行了。
不过,为什么最大流=最小割呢?
网上的一名 $Dalao$ 给出了答案:
$Q:$ 如何凭直觉解释最大流等于最小割?
$A:$ $1.$ 最大流不可能大于最小割, 因为最大流所有的水流都一定经过最小割那些割边, 流过的水流怎么可能比水管容量还大呢? $2.$ 最大流不可能小于最小割, 如果小, 那么说明水管容量没有物尽其用, 可以继续加大水流.
$Q:$ 如何严谨证明最大流等于最小割?
$A:$ $1.$ 证明任意的 $s-t$ 流量小于 $s-t$ 割容量, 证明方法: 根据定义即可; $2.$ 根据 $Ford-Fulkerson$ 算法求出的流来选出一个 $s-t$ 割, $S$ 为残余网络中 $s$ 可达的顶点集合, 这样就可以证出算法求出的流$=$这个割的容量, 再根据已经证明的 $1$ 来得出算法求出的流是最大流, 对应的割是最小割.
$Dalao——Jecvay Notes$
现在要注意的一点就是,直接跑朴素的 $Dinic$ 是会 T 的,这个时候或许会要一些优化,比如说用当前弧优化,或者可以跑$ISAP$,如果还过不了,吸氧算了[滑稽]。
Code:
1 |
|
本文标题:【题解】 [ICPC-Beijing 2006]狼抓兔子 网络流 bzoj1001/洛谷P4001
文章作者:Qiuly
发布时间:2019年02月14日 - 00:00
最后更新:2019年03月29日 - 13:54
原始链接:http://qiulyblog.github.io/2019/02/14/[题解]luoguP4001/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。